#include <iostream>
#include <boost/assert.hpp>
#include <boost/type_traits.hpp>
#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/next_prior.hpp>
using namespace boost;
using namespace boost::mpl;
using namespace std;

int main()
{
    cout << "--- Start ---" << endl;
    typedef int_<2> i2;
    typedef integral_c<short, 2> s2;

    assert(i2::value == 2);
    assert(i2::value == s2::value);

    assert((is_same<i2::type, i2>::value));
    assert((is_same<s2::value_type, short>::value));

    assert(i2::next::value == 3);
    assert(prior<s2>::type::value == 1);
    
    i2 two1;
    s2 two2;

    int i = two1 + two2;
    assert(i == int_<4>());

    cout << "--- End ---" << endl;
    return 0;
}
